
#pragma once

#define STRSAFE_NO_DEPRECATE 1
#include <tchar.h>
#include <intsafe.h>
#include <strsafe.h>
#include <icm.h>
#include <comdef.h> 
#include <comip.h>
#include <wincodec.h>
#include <wincodecsdk.h>

#pragma comment( lib, "windowscodecs.lib")

// This section contains information about the Microsoft Windows Imaging Component (WIC) Class.
#ifndef CLASS_DECLSPEC
    #ifdef _WINDLL
        #define CLASS_DECLSPEC  __declspec(dllexport)
    #else
        #define CLASS_DECLSPEC  __declspec(dllimport)
    #endif
#endif

CLASS_DECLSPEC HRESULT InitImagingFactory();
CLASS_DECLSPEC void ReleaseImagingFactory();
CLASS_DECLSPEC HRESULT GetImageLibLastError();

// Defines methods that add the concept of writeability and static in-memory representations of bitmaps to IWICBitmapSource. 
#include "WicBitmap.h"

// Exposes methods that produce a clipped version of the input bitmap for a specified rectangular region of interest.
#include "WicBitmapClipper.h"

// Exposes methods that provide information about a particular codec.
#include "WicBitmapCodecInfo.h"

// Exposes methods used for progress notification for encoders and decoders.
#include "WicBitmapCodecProgressNotification.h"

// Exposes methods that represent a decoder.
// The interface provides access to the decoder's properties such as global thumbnails (if supported), frames, and palette. 
#include "WicBitmapDecoder.h"

// Exposes methods that provide information about a decoder.
#include "WicBitmapDecoderInfo.h"

// Defines methods for setting an encoder's properties such as thumbnails, frames, and palettes.
#include "WicBitmapEncoder.h"

// Exposes methods that provide information about an encoder.
#include "WicBitmapEncoderInfo.h"

// Exposes methods that produce a flipped (horizontal or vertical) and/or rotated (by 90 degree increments) bitmap source. 
// Rotations are done before the flip.
#include "WicBitmapFlipRotator.h"

// Defines methods for decoding individual image frames of an encoded file.
#include "WicBitmapFrameDecode.h"

// Defines methods for encoding individual frames of an image.
#include "WicBitmapFrameEncode.h"

// Exposes methods that support the IWICBitmap::Lock method.
#include "WicBitmapLock.h"

// Exposes methods that produce a resized version of the input bitmap using a resampling or filtering algorithm.
#include "WicBitmapScaler.h"

// Exposes methods that refers to a source from which pixels are retrieved, but cannot be written back to.
#include "WicBitmapSource.h"

// Exposes methods for offloading certain operations to the underlying IWICBitmapSource implementation.
#include "WicBitmapSourceTransform.h"

// Exposes methods for color management.
#include "WicColorContext.h"

// Exposes methods that transforms an IWICBitmapSource from one color context to another.
#include "WicColorTransform.h"

// Exposes methods that provide component information.
#include "WicComponentInfo.h"

// Exposes methods that represent a pixel format converter.
// This interface provides the means of converting from one pixel format to another, 
// handling dithering and halftoning to indexed formats, palette translation and alpha thresholding.
#include "WicFormatConverter.h"

// Exposes methods for accessing and building a color table, primarily for indexed pixel formats.
#include "WicPalette.h"

// Exposes methods that provide additional load and save methods that take WICPersistOptions.
#include "WicPersistStream.h"

// Exposes methods that create streams for referencing imaging and metadata content.
#include "WicStream.h"

// Exposes methods for a stream provider.
#include "WicStreamProvider.h"

